home *** CD-ROM | disk | FTP | other *** search
/ No Fragments Archive 12: Textmags & Docs / nf_archive_12.iso / MAGS / SOURCES / ATARI_SRC.ZIP / atari source / FALCON / ACC / DRIVERS.ACC / PATH.C < prev    next >
Encoding:
C/C++ Source or Header  |  2001-02-10  |  6.5 KB  |  263 lines

  1. /* FILE:  PATH.C
  2.  * =======================================================================
  3.  * DATE:  December 1, 1992
  4.  *      January 15, 1993 When changing the path, write the assign.sys
  5.  *               imediately.
  6.  *
  7.  * DESCRIPTION: Handle the Font Path Setting
  8.  *
  9.  * INCLUDE FILE: path.h
  10.  */
  11.  
  12.  
  13.  
  14. /* INCLUDE FILES
  15.  * =======================================================================
  16.  */
  17. #include <sys\gemskel.h> 
  18. #include "country.h"
  19.  
  20. #include "device.h"
  21. #include "drvhead.h"
  22. #include "mainstuf.h"
  23. #include "fsmio.h"
  24. #include "mover.h"
  25. #include "text.h"
  26. #include "drivers.h"
  27.  
  28.  
  29. /* STRUCTURES
  30.  * ========================================================================
  31.  */
  32. struct foobar {
  33.     WORD    dummy;
  34.     WORD    *image;
  35.     };
  36.  
  37.  
  38.  
  39.  
  40. /* PROTOTYPES
  41.  * ========================================================================
  42.  */
  43. void    DoFontPath( void );
  44. int    Path_Button( int button, WORD *msg );
  45. void     wait_up( void );
  46.  
  47.  
  48.  
  49. /* DEFINES
  50.  * ========================================================================
  51.  */
  52. #define UNDO        0x6100
  53. #define DIR_MAX        28
  54.  
  55.  
  56.  
  57.  
  58. /* GLOBALS
  59.  * ========================================================================
  60.  */
  61. char dirpath[ 128 ];
  62. char newpath[ 128 ];
  63. char backup[ 128 ];
  64. char view_path[ 128 ];
  65.  
  66. /*char view_path[ DIR_MAX + 1 ];*/
  67. int  dircount;
  68. int  dirsize;
  69. char underbar[] = "____________________________";
  70.  
  71.  
  72.  
  73.  
  74. /* FUNCTIONS
  75.  * ========================================================================
  76.  */
  77.  
  78. /* DoFontPath()
  79.  * ========================================================================
  80.  * Set the Font Path ...
  81.  */
  82. void
  83. DoFontPath( void )
  84.    PrevTree = ad_front;
  85.    Reset_Tree( ad_path );           
  86.  
  87.    /* Font Directory Path */
  88.  
  89.    strcpy( backup, bitmap_path );
  90.    strcpy( dirpath, bitmap_path );
  91.    strcat( dirpath, "\\*.SYS");
  92.  
  93.    dircount = 0;
  94.    dirsize = ( int )strlen( &dirpath[0] );
  95.      
  96.    strcpy( view_path, underbar );
  97.    strncpy( view_path, dirpath, min( DIR_MAX, dirsize ) );
  98.  
  99.    if( dirsize > DIR_MAX )
  100.        view_path[ DIR_MAX - 1 ] = 0xAF;
  101.  
  102.    TedText( PPATH ) = view_path;
  103.                        
  104.    Objc_draw( tree, ROOT, MAX_DEPTH, NULL ); 
  105. }
  106.  
  107.  
  108.  
  109.  
  110. /* Path_Button()
  111.  * ========================================================================
  112.  * Handle the Button handling for the set font path tree...
  113.  */
  114. int
  115. Path_Button( int button, WORD *msg )
  116. {
  117.   int   quit = FALSE;
  118.   long  i;
  119.   MRETS mk;
  120.   int   out;
  121.   
  122.           
  123.   if( ( button != -1 ) && ( button & 0x8000 ) )
  124.      button &= 0x7FFF;      
  125.      
  126.   switch( button )
  127.   {
  128.      case POK:    XDeselect( tree, POK );
  129.                if( strcmp( bitmap_path, backup ) )
  130.                {
  131.                 MF_Save();     
  132.             Scan_Message( ad_scan, TRUE );    
  133.             read_fonts();
  134.             Scan_Message( ad_scan, FALSE );
  135.             MF_Restore();
  136.                  SetChangeFlag();
  137.  
  138.             Reset_Tree( PrevTree );     
  139.             SetDevices();
  140.             Objc_draw( tree, ROOT, MAX_DEPTH, NULL );
  141.             
  142.             /* WRITE THE ASSIGN.SYS IMMEDIATELY */
  143.             write_assign();
  144.             return( quit );
  145.                }  
  146.                RestoreMainTree();
  147.                break;
  148.    
  149.      case PCANCEL:  Deselect( PCANCEL );
  150.                  strcpy( bitmap_path, backup );
  151.                  RestoreMainTree();
  152.                  break;
  153.                            
  154.      case PLEFT:    XSelect( tree, PLEFT );
  155.                  do
  156.                  {
  157.                     Graf_mkstate( &mk );
  158.                     if( dircount )
  159.                     {
  160.                       dircount--;
  161.                       strncpy( view_path, &dirpath[ dircount ], min( DIR_MAX, dirsize - dircount ) );
  162.                       if( dircount )
  163.                            view_path[0] = 0xAE;
  164.                       if((dirsize - dircount ) > DIR_MAX )
  165.                            view_path[ DIR_MAX - 1 ] = 0xAF;
  166.                       TedText( PPATH ) = view_path;
  167.                       Objc_draw( tree, PPATH, MAX_DEPTH, NULL );
  168.                     }  
  169.                  }while( mk.buttons );
  170.                  XDeselect( tree, PLEFT );
  171.                  break;
  172.                  
  173.      case PRIGHT:   XSelect( tree, PRIGHT );
  174.                  do
  175.                  {
  176.                     Graf_mkstate( &mk );
  177.                  if( ( dirsize > DIR_MAX ) && ((dircount + DIR_MAX ) < dirsize ))
  178.                  {
  179.                     dircount++;
  180.                     strncpy( view_path, &dirpath[ dircount], min( DIR_MAX, dirsize - dircount) );
  181.                     view_path[0] = 0xAE;
  182.                     if( (dirsize - dircount) > DIR_MAX )
  183.                         view_path[ DIR_MAX - 1 ] = 0xAF;
  184.                     TedText( PPATH ) = view_path;
  185.                     Objc_draw( tree, PPATH, MAX_DEPTH, NULL );
  186.                  }                   
  187.                  }while( mk.buttons );
  188.                  XDeselect( tree, PRIGHT );
  189.                  break;
  190.                  
  191.      case PPATH:    XSelect( tree, PPATH );
  192.                  wait_up();
  193.                 strcpy( newpath, dirpath );
  194.                 for( i = strlen( newpath ); i && ( newpath[i] != '\\'); newpath[ i-- ] = '\0' );
  195.                  out = fsel_name( FALSE, newpath, "*.SYS", dtext );
  196.                  if( ( ( out == A_OK ) || ( out == A_CANCEL )) && ( newpath[0] != '\0' ) )
  197.                  {
  198.                       for( i = strlen( newpath ); i && ( newpath[i] != '\\'); newpath[ i-- ] = '\0' );
  199.                       
  200.                    strcpy( dirpath, newpath );
  201.                    
  202.                    newpath[i] = '\0';    /* Get rid of the '\\' */
  203.                    strcpy( bitmap_path, newpath );
  204.                    
  205.                    strcat( dirpath, "*.SYS" );
  206.                    dirsize = (int)strlen( &dirpath[0] );
  207.                    strcpy( view_path, underbar );
  208.                    strncpy( view_path, dirpath, min( DIR_MAX, dirsize) );
  209.                    dircount = 0;
  210.                    if( dirsize > DIR_MAX )
  211.                       view_path[ DIR_MAX - 1 ] = 0xAF;
  212.                  TedText( PPATH ) = view_path;
  213. /*                 
  214.                  Objc_draw( tree, PPATH, MAX_DEPTH, NULL );
  215.  */                 
  216.             }
  217.             XDeselect( tree, PPATH );
  218.             break;
  219.                
  220.      default:    if( button == -1 )
  221.              {
  222.                 switch( msg[0] )
  223.                 {
  224.                   case WM_REDRAW: 
  225.                                break;
  226.                                    
  227.                   case AC_CLOSE:  quit = TRUE;
  228.                                break;
  229.                                        
  230.                   case WM_CLOSED: quit = TRUE;
  231.                                if( strcmp( bitmap_path, backup ) )
  232.                                    SetChangeFlag();
  233.                                CloseWindow();
  234.                      break;
  235.  
  236.              case CT_KEY:    
  237.                           break;
  238.  
  239.                   default:
  240.                           break;
  241.                 }
  242.              }
  243.              break;
  244.      
  245.   }
  246.   return( quit );
  247.  
  248. }
  249.  
  250.  
  251. /* wait_up()
  252.  *==========================================================================
  253.  * Wait for an up button.
  254.  */
  255. void
  256. wait_up( void )
  257. {
  258.    MRETS m;
  259.    
  260.    Evnt_button( 1, 1, 0, &m );
  261. }
  262.